package com.lt.listener;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/**
 * 想要从web层获取参数就需要监听器 这是自定义的监听器
 * 作用：加载应用上下文
 * Context 上下文
 * Loader  加载器
 * Listener 监听器
 * Initialized 初始化
 * Destroyed 销毁
 */
public class ContextLoaderListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        //获取最大的域=>ServletContext
        ServletContext servletContext = servletContextEvent.getServletContext();
        //Java层想要读取到web层中的参数需要通过ServletContext获取 这一步是把resources下的xml配置文件名称配置到web.xml中
        String contextConfig = servletContext.getInitParameter("contextConfig");
        //加载spring配置文件初始化spring容器 去加载xml配置文件创建spring容器 命名为app
        ApplicationContext app = new ClassPathXmlApplicationContext(contextConfig);
        //将spring应用上下文对象（app）存储到最大的域当中让web层可以拿到 最大的域=>ServletContext
        //将app存储到最大的域servletContext中 命名为apps
        servletContext.setAttribute("app", app);
        //存储完成后告诉web.xml完成配置 就需要在web层配置监听器
        System.out.println("web层监听器正在监听java层的ContextLoaderListener。初始化已完成，spring容器创建完毕");
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}
